'use strict'

//常量
/////////var和let申明的是一个变量，如果要表示一个常量，通常用大写来表示，不要修改常量的值,引用新的关键字const来定义常量
const A=3.14
//A=3    //某些浏览器不报错，但无效果
console.log(A);



//解构赋值
var[x,y,z]=['辣椒油','萝卜头',52]    //数组元素多个赋值用[]括起来
console.log('x='+x,'y='+y,'z='+z);    //x=辣椒油 y=萝卜头 z=52   浏览器支持解构赋值就不会报错
///////数组本身还有嵌套，嵌套层次和位置保持一致
let[a,[b,c]]=['熊大',['熊二','光头强']]
console.log(a,b,c);   //[熊大 熊二 光头强]

var arr=['你好',['世界','我来了']]
var [aa,[bb,cc]]=arr
console.log(aa);  //你好
console.log(bb);  //世界
console.log(cc);  //我来了
///////解构赋值可以忽略某些元素，只对第三个元素赋值
var[ , ,d]=['333','555','666']
console.log(d);   //666

///////从一个对象获得若干个属性，用解构赋值可快速获取对象的指定属性
var e={
    name:'辣椒油',
    age:'20',
    adress:'福建省',
    phone:'10086',
    sex:'男',
    school:{
        clss:'20',
        glade:'1'
    }
};
var{name,age,sex}=e;   //分别被赋值为对应属性
console.log('name='+name,'age='+age,'sex='+sex);   //name=辣椒油 age=20 sex=男
///////对嵌套对象进行赋值
 var{name,school:{clss,glade,aa}}=e;
console.log(name);   //辣椒油
console.log(clss);   //20
console.log(glade);  //1
console.log(aa);   //underfined  因为aa不存在
/* console.log(school);   //控制台报错，因为school不是变量 */
////如果要使用的变量名和属性不一致，则将phone赋值给id
var{name,phone:id}=e
console.log(name);  //辣椒油
console.log(id);    //10086  phone不是变量，而是为了让变量id获得phone的属性
//console.log(phone);   //Uncaught ReferenceError: passport is not defined  控制台报错，因为phone不是变量
//////解构赋值可以设置默认值，就避免了变量不存在返回undefined的问题
var {name,height=180}=e  //设置身高的默认值为180
console.log(name,height);   //辣椒油 180


var obj={
    name:'我和我的父辈',
    price:58.0
}
var name,price;
({name,price}=obj)
//var{name,price}=obj  与上两行相等
console.log(name);
console.log(price);


//使用场景   解构赋值可以大大简化了代码，例如交换两个值的变量
var w=1,q=2
console.log('w='+w,'q='+q);  //w=1 q=2
[w,q]=[q,w]
console.log('w='+w,'q='+q);  //w=2 q=1

//快速获取当前页面的域名和路径
var {hostname:domain, pathname:path} = location;
console.log(location);



//如果一个函数接收一个对象作为参数，那么，可以使用解构直接把对象的属性绑定到变量中。例如，下面的函数可以快速创建一个Date对象：
//它的方便之处在于传入的对象只需要year、month和day这三个属性：
function buildDate({year, month, day, hour=0, minute=0, second=0}) {
    return new Date(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
}
console.log(buildDate({ year: 2017, month: 1, day: 1 }));  //Sun Jan 01 2017 00:00:00 GMT+0800 (中国标准时间)